package help

import (
	"fmt"
	"github.com/dgrijalva/jwt-go"
	uuid "github.com/satori/go.uuid"
)

type UserClaims struct {
	jwt.StandardClaims
	Name    string `json:"name"`
	Id      uint   `json:"id"`
	IsAdmin int    `json:"is_admin"`
}

var MyKey = []byte("cjh")

// GenerateToken
// 生成token
func GenerateToken(id uint, name string) (string, error) {
	userClaims := &UserClaims{
		StandardClaims: jwt.StandardClaims{},
		Name:           name,
		Id:             id,
	}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, userClaims)
	s, err := token.SignedString(MyKey)
	if err != nil {
		return "", err
	}
	return s, nil
}

// TestAnalyseToken
// 解析token
func AnalyseToken(tokenString string) (*UserClaims, error) {
	userClaim := new(UserClaims)
	claims, err := jwt.ParseWithClaims(tokenString, userClaim, func(token *jwt.Token) (interface{}, error) {
		return MyKey, nil
	})
	if err != nil {
		return nil, err
	}
	if !claims.Valid {
		return nil, fmt.Errorf("invalid token:%v", err)
	}
	return userClaim, nil
}

// GetUUID
// 生成唯一码
func GetUUID() string {
	return uuid.NewV4().String()
}
